package com.lt.basic.project.common.uid.builder;

import com.lt.basic.project.common.uid.sequence.Sequence;

import java.net.InetAddress;

/**
 * 序列号生成器构建者
 * Created by xuan on 2018/5/30.
 */
public interface SequenceBuilder {

    /**
     * 构建一个序列号生成器
     *
     * @return 序列号生成器
     */
    Sequence build();

    /**
     * 获取workerId 取 sum二进制的前5位
     *
     * @param sum
     * @return
     */
    static long getWorkerId(long sum) {
        if (sum > 1023 || sum < 0) {
            return 0;
        }

        if (sum < 32) {// 0到31(11111) 最多5位 直接返回
            return 31;
        }
        // 32到1023
        return sum >> 5;
    }

    /**
     * 取 sum二进制的后5位
     * @param sum
     * @return
     */
    static long getDatacenterId(long sum) {
        if (sum > 1023 || sum < 0) {
            return 0;
        }

        if (sum < 32) {// 0到31(11111) 最多5位 返回0
            return 0;
        }
        return sum & 31;
    }

    /**
     * 获取本机的ip 然后计算他们的和
     * @return
     */
    static long ip() {
        try {
            String ip = InetAddress.getLocalHost().getHostAddress();

            String[] arr = ip.split("\\.");
            long sum = 0;
            for (String num : arr) {
                sum += Long.parseLong(num);
            }
            return sum;
        } catch (Exception e) {
            return 0;
        }
    }
}
